<?php
/**
 * User: LRZ
 * Date: 2020/3/2
 * Time: 15:22
 */

/**
 *  415.字符串相加
 *
 *  标签：字符串
 *
 *  给定两个字符串形式的非负整数 num1 和num2 ，计算它们的和。
 *
 *  注意：
 *      num1 和num2 的长度都小于 5100.
 *      num1 和num2 都只包含数字 0-9.
 *      num1 和num2 都不包含任何前导零。
 *      你不能使用任何內建 BigInteger 库， 也不能直接将输入的字符串转换为整数形式。
 *
 *  来源：力扣（LeetCode）
 *  链接：https://leetcode-cn.com/problems/add-strings
 *  著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

$start = microtime(true);

$num1 = '9';
$num2 = '999';
$res  = addStrings($num1, $num2);

$end = microtime(true);
print_r($res);
printf(' total run: %.2f s<br>' . 'memory usage: %.2f M<br> ', $end - $start, memory_get_usage() / 1024 / 1024);

function addStrings($num1, $num2)
{
    $i     = strlen($num1) - 1;
    $j     = strlen($num2) - 1;
    $res   = '';
    $carry = 0;
    while ($i >= 0 || $j >= 0) {
        $n1    = $i >= 0 ? $num1[$i] : 0;
        $n2    = $j >= 0 ? $num2[$j] : 0;
        $tmp   = $n1 + $n2 + $carry;
        $carry = (int)($tmp / 10);
        $res   = ($tmp % 10) . $res;
        $i--;
        $j--;
    }
    if ($carry === 1) {
        $res = '1' . $res;
    }
    return $res;
}